#!/bin/sh

appdir=`pwd`

cd ..
parentdir=`pwd`
cd $appdir

# JDK路径
JAVA_HOME=/opt/soft/jdk1.8
#JAVA_HOME=C:\Program Files\Java\jdk1.8.0_341
#JAVA_HOME=$parentdir/java/java_linux

# 外部配置文件绝对目录,如果是目录需要/结尾，也可以直接指定文件
# 如果指定的是目录,spring则会读取目录中的所有配置文件
CONFIG_DIR=file:${appdir}"/config/"

# JVM启动参数
# -server：一定要作为第一个参数，多个CPU时性能佳
# -Xloggc：记录GC日志，建议写成绝对路径，如此便可在任意目录下执行该shell脚本
#JAVA_OPTS="-server -Xms1024m -Xmx1024m"
#JAVA_OPTS="-server -Xms1024m -Xmx1024m -Xloggc:$appdir/log/gc.log"
#JAVA_OPTS="-server -Xms1024m -Xmx1024m -Xloggc:$parentdir/source/log/middle_gc.log -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.10.70 -Dcom.sun.management.jmxremote.port=9999" 


# Java程序主体所在的目录，即classes的上一级目录
APP_HOME=$parentdir

# Java程序日志所在的目录
APP_LOG=$appdir/log
if [ ! -d "$APP_LOG" ]; then
  mkdir $APP_LOG
fi

# Java主程序，也就是 可执行jar
APP_MAIN=xaytsc-common-rs-0.0.1-SNAPSHOT
APP_JAR=$APP_MAIN\.jar

# 初始化全局变量，用于标识交易前置系统的PID（0表示未启动）
tradePortalPID=0

# 获取Java应用的PID
# ------------------------------------------------------------------------------------------------------
# 说明：通过JDK自带的jps命令，联合Linux中的grep命令，可以准确查找到Java应用的PID
#       [jps -l]表示显示Java主程序的完整包路径
#       awk命令可以分割出PID（$1部分）及Java主程序名称（$2部分）
# 例子：[$JAVA_HOME/bin/jps -l | grep $APP_MAIN]命令执行，会看到[5775 com.cucpay.tradeportal.MainApp]
# 另外：这个命令也可以取到程序的PID-->[ps aux|grep java|grep $APP_MAIN|grep -v grep|awk '{print $2}']
# ------------------------------------------------------------------------------------------------------
getTradeProtalPID(){
    javaps=`$JAVA_HOME/bin/jps -l | grep -w $APP_MAIN`
    if [ -n "$javaps" ]; then
        tradePortalPID=`echo $javaps | awk '{print $1}'`
    else
        tradePortalPID=0
    fi
}

# 启动Java应用程序
# ------------------------------------------------------------------------------------------------------
# 1、调用getTradeProtalPID()函数，刷新$tradePortalPID全局变量
# 2、若程序已经启动（$tradePortalPID不等于0），则提示程序已启动
# 3、若程序未被启动，则执行启动命令
# 4、启动命令执行后，再次调用getTradeProtalPID()函数
# 5、若步骤4执行后，程序的PID不等于0，则打印Success，反之打印Failed
# 注意：[echo -n]表示打印字符后不换行
# 注意：[nohup command > /path/nohup.log &]是将作业输出到nohup.log，否则它会输出到该脚本目录下的nohup.out中
# ------------------------------------------------------------------------------------------------------
startup(){
    getTradeProtalPID
    echo "==============================================================================================="
    if [ $tradePortalPID -ne 0 ]; then
        echo "$APP_MAIN already started(PID=$tradePortalPID)"
        echo "==============================================================================================="
    else
        echo -n "Starting $APP_MAIN"
#	nohup java $JAVA_OPTS -jar $APP_JAR > $APP_LOG/nohup.log &
## 输入日志
        nohup $JAVA_HOME/bin/java $JAVA_OPTS -jar $APP_JAR --spring.config.location=${CONFIG_DIR} > $APP_LOG/xaytsc-common-be_startup.log &
## 不输出日志
#       nohup $JAVA_HOME/bin/java $JAVA_OPTS -jar $APP_JAR > /dev/null 2>&1 &
        getTradeProtalPID
        if [ $tradePortalPID -ne 0 ]; then
            echo "(PID=$tradePortalPID)...[Success]"
            echo "==============================================================================================="
        else
            echo "[Failed]"
            echo "==============================================================================================="
        fi
    fi
}

# 调用启动命令
startup

